NAGWare f95 Compiler Release 5.0 Release NoteIntroductionRelease 5.0 of the NAGWare f95 Compiler is a major release containing significant improvements to the compiler. Compatibility with Earlier ReleasesNAGWare f95 5.0 is fully compatible with NAGWare f90 Releases 2.1 and 2.2, as well as with NAGWare f95 Releases 1.0, 4.0, 4.1 and 4.2. New Features
GUI DebuggerA modified version of the open-source debugger "ups" is available on most platforms. Type ExtensionType extension provides the first phase of object orientation; inheritance and polymorphic objects. Extending TypesAny non-SEQUENCE derived type can be extended using the EXTENDS keyword. The extended type inherits all the components of the parent type and may add extra components. For example: TYPE point REAL x,y END TYPE TYPE,EXTENDS(point) :: point_3d REAL z END TYPE The type point_3d has x, y and z components. Additionally, it has a point component which refers to the inherited part. Polymorphic VariablesA polymorphic variable is a pointer, allocatable array or dummy argument that is declared using the CLASS keyword instead of the TYPE keyword. A CLASS(typename) variable can assume any type in the class of types consisting of TYPE(typename) and all extensions of typename. For example: REAL FUNCTION bearing(a) CLASS(point) a bearing = atan2(a%y,a%x) END The function bearing may be applied to a TYPE(point) object or to a TYPE(point_3d) object, or indeed to an object of any type that is an extension of TYPE(point). Typed AllocationThe ALLOCATE statement may now include a type-spec; this specifies the type to allocate for polymorphic variables.For example: CLASS(t),POINTER :: x ... ALLOCATE(t2::x) The type specification must be a derived-type name, and must be followed by a double colon. Note that the type specification is just type-name, not TYPE(type-name). Each item in the allocation list must be type-compatible with the type specified (in particular, if an item is not polymorphic, it must be of the same type as that specified). Type SelectionThe SELECT TYPE construct provides both a means of testing the dynamic type of a polymorphic variable and access to the extended components of that variable.For example: CLASS(t) x ... SELECT TYPE(p=>x) TYPE IS (t1) ! ! This section is executed only if X is exactly of TYPE(t1), not an ! extension thereof. P is TYPE(t1). ! TYPE IS (t2) ! ! This section is executed only if X is exactly of TYPE(t2), not an ! extension thereof. P is TYPE(t2). ! CLASS IS (t3) ! ! This section is executed if X is of TYPE(t3), or of some extension ! thereof, and if it is not caught by a more specific case. P is CLASS(t3). ! END SELECT Note that "SELECT TYPE(x)" is short for "SELECT TYPE(x=>x)". Rank-remapping Pointer AssignmentThis feature allows a multi-dimensional pointer to point to a single-dimensional object. For example: REAL,POINTER :: diagonal(:),matrix(:,:),base(:) ... ALLOCATE(base(n*n)) matrix(1:n,1:n) => base diagonal => base(::n+1) ! ! ``diagonal'' now points to the diagonal elements of ``matrix''. ! Memory Allocation TracingThe -mtrace suboptions have been completely revised. Control is provided over whether the address, size, and line number of each allocation is displayed, or the tracing output can be suppressed entirely. A "paranoia" mode is provided where the memory allocator protects its data structures against inadvertent modification by the user program. Runtime environment variables may be used to override the tracing options a program was built with, and to specify where to write the tracing output. These are only operative if the program was built with some tracing option (-mtrace=off will build a program with the tracing-capable memory allocator). The -mtrace option is now compatible with the -thread_safe option, but remains incompatible with the -gc option. For more details see the NAGWare f95 man page. Additional Checking
Performance EnhancementsThe following intrinsic functions have had their performance improved:
Other performance enhancements are:
Minor Enhancements
New Fortran StandardThe extensions (described above) which follow the rules proposed by the proposed Final Committee Draft of the revised Fortran standard are:
For information see J3 document "03-007.ps". |
© Numerical Algorithms Group
Visit NAG on the web at:
www.nag.co.uk (Europe and ROW)
www.nag.com (North America)
www.nag-j.co.jp (Japan)
http://www.nag.co.uk/nagware/np/doc/relnotes50.asp